//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <utilcls.h>
#include <eic.h>
#include "EnvoiGED.h"
#include "uEnvoiGED.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//#pragma link "CBitBtn"
//#pragma link "CEdit"
//#pragma link "CGBox"
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
#define MODULE_TAG 1


TModalResult __fastcall GED_Envoi( Variant *pvGedEIC, const WideString &Classement, const AnsiString &NomDocument, int &DestGED, AnsiString &NomImprimante)
{
  TModalResult bResult = mrNone;
  TEnvoiGED *frmEnvoiGED;
  bool bCapture = false;

  try{
    frmEnvoiGED = new TEnvoiGED( NULL, pvGedEIC);

    frmEnvoiGED->pnlInfoClassAuto->Visible = false;
    if( Classement.IsEmpty())
    {   // Le modèle de classement n'est pas paramétré
      if( GED_IsClassAuto())
      {
        frmEnvoiGED->pnlInfoClassAuto->Visible = true;
        frmEnvoiGED->lblInfoClassAuto->Caption = "Aucun modèle de classement n'a été sélectionné sur ce dossier. "
                                                 "Le classement automatique ne peut pas fonctionner.";
        if(GetModuleHandle( "MENUFED.EXE"))
        {
          frmEnvoiGED->lblInfoClassAuto->Caption = frmEnvoiGED->lblInfoClassAuto->Caption + "\n"
                                                   "Pour sélectionner ce modèle, Allez sur la liste des dossiers, cliquez sur 'Modifier'"
                                                   " puis allez dans l'onglet GED.";
        }
      }else{
        bCapture = true;
      }
    }else
    {
      TStringList *Criteres = new TStringList();
      Criteres->CommaText = Classement;
      if( (Criteres->Strings[0] != CLASSEMENT_NON_REMPLI) && (Criteres->Strings[0] != CLASSEMENT_AUTO))
      {
        int nbCritereValides = 0;

        for(int i = 0; i < Criteres->Count; i++)
        {
          if( !Criteres->Strings[i].IsEmpty())
            nbCritereValides++;
        }

        switch( nbCritereValides)
        {
          case 4 :
          case 5 : NomImprimante = GED_NomPilote();
                   DestGED       = nbCritereValides;
                   bResult = mrRetry;
            break;
          default :
            if( nbCritereValides < 4)
            {
              AnsiString s = "Les paramètres de classement :";
              if( (Criteres->Count == 0) || Criteres->Strings[0].IsEmpty())
                s += " 'Armoire';";
              if( (Criteres->Count <= 1) || Criteres->Strings[1].IsEmpty())
                s += " 'Rayon';";
              if( (Criteres->Count <= 2) || Criteres->Strings[2].IsEmpty())
                s += " 'Classeur';";
              if( (Criteres->Count <= 3) || Criteres->Strings[3].IsEmpty())
                s += " 'Dossier';";
              s.Delete(s.Length(),1);
              s += " ne sont pas paramétrés. Le classement automatique sera inactif pour cet état.";
              EICAttention( s);
            }
            else throw EUser( TAGL, "Trop de critères");
        }
      }
      delete Criteres;
    }
    if( bResult == mrNone)
    {
      if( !frmEnvoiGED->pnlInfoClassAuto->Visible)
        frmEnvoiGED->Height = frmEnvoiGED->Height - frmEnvoiGED->pnlInfoClassAuto->Height;

      if( NomDocument.IsEmpty())
      {
        frmEnvoiGED->pnlNomDoc->Visible = false;
        frmEnvoiGED->Height = frmEnvoiGED->Height - frmEnvoiGED->pnlNomDoc->Height;
      }else
      {
        frmEnvoiGED->edDoc->Caption = NomDocument;
        frmEnvoiGED->rbDestClasse->Caption = "Classer dans";
        frmEnvoiGED->rbDestPaniere->Caption = "Envoyer dans la panière";
      }

      switch(DestGED)
      {
        case 1 : frmEnvoiGED->rbDestClasse->Checked = true;  break;
        case 2 : frmEnvoiGED->rbDestPaniere->Checked = true; break;
      }
      if( hwndFenetreEICShell)
        SetWindowLong( frmEnvoiGED->Handle, GWL_HWNDPARENT, (long)hwndFenetreEICShell);
      bResult = frmEnvoiGED->ShowModal();
      if( bResult == mrOk)
      {
        if( frmEnvoiGED->rbDestClasse->Checked)
        {
          DestGED = 1;
          NomImprimante = GED_NomPilote();
          if( bCapture)
            GED_Capture( pvGedEIC, DestGED);
        }
        if( frmEnvoiGED->rbDestPaniere->Checked) {DestGED = 2; NomImprimante = GED_NomPilotePaniere();}
      }
    }

    delete frmEnvoiGED;
  }
  catch( Exception &ex)
  {   EICDisplayException( TAGL, ex); bResult = false;
  }
  return bResult;
}

//---------------------------------------------------------------------------
__fastcall TEnvoiGED::TEnvoiGED(TComponent* Owner, Variant *pvGedEIC)
  : TForm(Owner)
{
  m_LstSelectionGED = new TStringList();
  m_pvGedEIC = pvGedEIC;
//  m_vGedEICPaniere = Variant::CreateObject( "NovaPaniere.CNovaPaniere");
  lblDestPaniere->Caption = "Attention, avant d'effectuer l'envoi dans la panière, il faut veiller à "
                            "ce que la capture d'impression soit armée pour la panière de destination. \r\n"
                            "Pour ce faire, il faut cliquer sur le bouton 'Capture d'impression' de "
                            "la fenêtre de gestion des panières dans "NomAppliGED".";
  rbDestClick( NULL);
}
//---------------------------------------------------------------------------
__fastcall TEnvoiGED::~TEnvoiGED()
{
  delete m_LstSelectionGED;
//  m_vGedEICPaniere = Unassigned;
}
//---------------------------------------------------------------------------
void __fastcall TEnvoiGED::RefreshSelectionGED()
{
  m_LstSelectionGED->Clear();

  if( rbDestClasse->Checked)
  {
    m_LstSelectionGED->Add( m_pvGedEIC->OlePropertyGet ("Criteres", 1));
    m_LstSelectionGED->Add( m_pvGedEIC->OlePropertyGet ("Criteres", 2));
    m_LstSelectionGED->Add( m_pvGedEIC->OlePropertyGet ("Criteres", 3));
    m_LstSelectionGED->Add( m_pvGedEIC->OlePropertyGet ("Criteres", 4));

    if( !(bool)m_pvGedEIC->OlePropertyGet ("DossierVisible") ||
        (m_pvGedEIC->OleFunction( "CriteresDossierEnCours") != m_LstSelectionGED->Text) )
    {
      m_pvGedEIC->OleFunction("ChargeDossier"); // permet de charger le dossier actif dans la grille
    }

    int Chemise = m_pvGedEIC->OlePropertyGet( "activechemise");
    if( Chemise < 0)
      m_LstSelectionGED->Add( EmptyStr);
    else
      m_LstSelectionGED->Add( m_pvGedEIC->OlePropertyGet ("TitreChemise", Chemise));
  }
  if( rbDestPaniere->Checked)
  {
//    m_LstSelectionGED->Add( m_vGedEICPaniere.OlePropertyGet ("Paniere"));
  }
}

//---------------------------------------------------------------------------
void __fastcall TEnvoiGED::btRefreshClick(TObject *Sender)
{
  RefreshSelectionGED();
  if( rbDestClasse->Checked)
  {
    edArmoire->Text  = m_LstSelectionGED->Strings[0];
    edRayon->Text    = m_LstSelectionGED->Strings[1];
    edClasseur->Text = m_LstSelectionGED->Strings[2];
    edDossier->Text  = m_LstSelectionGED->Strings[3];
    edChemise->Text  = m_LstSelectionGED->Strings[4];
  }
//  if( rbDestPaniere->Checked)
//    edPaniere->Text  = m_LstSelectionGED->Strings[0];
}
//---------------------------------------------------------------------------

void __fastcall TEnvoiGED::btEnvoyerClick(TObject *Sender)
{
  if( rbDestClasse->Checked && edDossier->Text.IsEmpty())
  {
    EICAttention( "Il n'y a pas de dossier actif dans "NomAppliGED". Veuillez sélectionner un dossier dans "NomAppliGED" avant d'envoyer le document.");
    return;
  }

  AnsiString Destination = m_LstSelectionGED->CommaText;
  RefreshSelectionGED();
  if( m_LstSelectionGED->CommaText != Destination)
  {
/*    if( Application->MessageBox( (AnsiString(
                                 "Le classement a changé dans "NomAppliGED".\r\n"
                                 "Le nouveau classement est :\r\n")+
                                 "\tArmoire : " + m_LstSelectionGED->Strings[0] + "\r\n"
                                 "\tRayon : " + m_LstSelectionGED->Strings[1] + "\r\n"
                                 "\tClasseur : " + m_LstSelectionGED->Strings[2] + "\r\n"
                                 "\tDossier : " + m_LstSelectionGED->Strings[3] + "\r\n" +
                                 (m_LstSelectionGED->Strings[4].IsEmpty()?EmptyStr:("\tChemise : " + m_LstSelectionGED->Strings[4] + "\r\n"))+
                                 "\r\n"
                                 "Voulez vous continuer ?").c_str(),
                                 "Attention",
                                 MB_ICONWARNING | MB_YESNO) == IDNO) */
    if( !EICQuestion( (AnsiString(
                                 "Le classement a changé dans "NomAppliGED".\r\n"
                                 "Le nouveau classement est :\r\n")+
                                 "\tArmoire : " + m_LstSelectionGED->Strings[0] + "\r\n"
                                 "\tRayon : " + m_LstSelectionGED->Strings[1] + "\r\n"
                                 "\tClasseur : " + m_LstSelectionGED->Strings[2] + "\r\n"
                                 "\tDossier : " + m_LstSelectionGED->Strings[3] + "\r\n" +
                                 (m_LstSelectionGED->Strings[4].IsEmpty()?EmptyStr:("\tChemise : " + m_LstSelectionGED->Strings[4] + "\r\n"))+
                                 "\r\n"
                                 "Voulez vous continuer ?").c_str(),
                                 "Attention"))
    {
      m_LstSelectionGED->CommaText = Destination;
      return;
    }
  }
  ModalResult = mrOk;
}
//---------------------------------------------------------------------------

void __fastcall TEnvoiGED::rbDestClick(TObject *Sender)
{
  btRefresh->Enabled = rbDestClasse->Checked;
  btRefreshClick( btRefresh);
  if( !rbDestClasse->Checked)
  {
    edArmoire->Text  = EmptyStr;
    edRayon->Text    = EmptyStr;
    edClasseur->Text = EmptyStr;
    edDossier->Text  = EmptyStr;
    edChemise->Text  = EmptyStr;
  }
//  if( !rbDestPaniere->Checked)
//    edPaniere->Text  = EmptyStr;
  btEnvoyer->Enabled = rbDestClasse->Checked || rbDestPaniere->Checked;
}
//---------------------------------------------------------------------------



